#ifndef ESTACIONAMIENTO_H_
#define ESTACIONAMIENTO_H_

#include "PlazaEstacionamiento.h"
#include "concurrencia/LockFile.h"
#include "concurrencia/MemoriaCompartida.h"
#include "Utils.h"
#include "Auto.h"
#include "Administrador.h"
#include <iostream>

using namespace std;

class Estacionamiento {
private:
	MemoriaCompartida<PlazaEstacionamiento> plazasEstacionamiento;
	Administrador* administrador;
	int cantidadLugares;
	LockFile * lockEstacionamiento;
	long numeroEstacionamiento;
public:
	Estacionamiento();
	Estacionamiento(long numeroEstacionamiento, int cantidadLugares,
			double precioPorHora);
	void lockPlaza(int pos);
	void unlock(int pos);
	void desocuparPlaza(int pos);
	void ocuparPlaza(int pos);
	int getCantidadLugares();
	void sacarAuto(Auto * autoSalido);
	void sacarAuto(int posicionOcupada, int tiempoEnElEstacionamiento);
	Administrador* getAdministrador();
	int getPosicionLibre();
	void estaciona(Auto * autoEntrando);
	void liberarMemoria();
	virtual ~Estacionamiento();
};

#endif /* ESTACIONAMIENTO_H_ */
